package com.gjson.androidtools.library.imagepicker.util;

import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Environment;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.Display;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.ViewConfiguration;
import android.view.WindowManager;

/**
 * Created by gjson on 2018/6/22.
 */
public class Utils {

  /** 获得状态栏的高度 */
  public static int getStatusHeight(Context context) {
    int statusHeight = -1;
    try {
      Class<?> clazz = Class.forName("com.android.internal.R$dimen");
      Object object = clazz.newInstance();
      int height = Integer.parseInt(clazz.getField("status_bar_height").get(object).toString());
      statusHeight = context.getResources().getDimensionPixelSize(height);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return statusHeight;
  }

  /** 根据屏幕宽度与密度计算GridView显示的列数， 最少为三列，并获取Item宽度 */
  public static int getImageItemWidth(Activity activity) {
    int screenWidth = activity.getResources().getDisplayMetrics().widthPixels;
    int densityDpi = activity.getResources().getDisplayMetrics().densityDpi;
    int cols = screenWidth / densityDpi;
    cols = cols < 3 ? 3 : cols;
    int columnSpace = (int) (2 * activity.getResources().getDisplayMetrics().density);
    return (screenWidth - columnSpace * (cols - 1)) / cols;
  }

  /**
   * 判断SDCard是否可用
   */
  public static boolean existSDCard() {
    return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
  }

  /**
   * 获取手机大小（分辨率）
   */
  public static DisplayMetrics getScreenPix(Activity activity) {
    DisplayMetrics displaysMetrics = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(displaysMetrics);
    return displaysMetrics;
  }

  /** dp转px */
  public static int dp2px(Context context, float dpVal) {
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal,
        context.getResources().getDisplayMetrics());
  }

  /**
   * 判断手机是否含有虚拟按键  99%
   */
  public static boolean hasVirtualNavigationBar(Context context) {
    boolean hasSoftwareKeys = true;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
      Display d =
          ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

      DisplayMetrics realDisplayMetrics = new DisplayMetrics();
      d.getRealMetrics(realDisplayMetrics);

      int realHeight = realDisplayMetrics.heightPixels;
      int realWidth = realDisplayMetrics.widthPixels;

      DisplayMetrics displayMetrics = new DisplayMetrics();
      d.getMetrics(displayMetrics);

      int displayHeight = displayMetrics.heightPixels;
      int displayWidth = displayMetrics.widthPixels;

      hasSoftwareKeys = (realWidth - displayWidth) > 0 || (realHeight - displayHeight) > 0;
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
      boolean hasMenuKey = ViewConfiguration.get(context).hasPermanentMenuKey();
      boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
      hasSoftwareKeys = !hasMenuKey && !hasBackKey;
    }

    return hasSoftwareKeys;
  }

  /**
   * 获取导航栏高度，有些没有虚拟导航栏的手机也能获取到，建议先判断是否有虚拟按键
   */
  public static int getNavigationBarHeight(Context context) {
    int resourceId =
        context.getResources().getIdentifier("navigation_bar_height", "dimen", "android");
    return resourceId > 0 ? context.getResources().getDimensionPixelSize(resourceId) : 0;
  }
}
